package com.njupt.wuaiagent.agent;

import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * @Author: wujiaming
 * @CreateTime: 2025/5/22 19:55
 * @Description: ReAct (Reasoning and Acting) 模式代理抽象类
 * 实现了思考-行动的循环模式
 *
 * 参考了OpenManus的实现方式，继承自BaseAgent，并且将step方法分解为think和act两个抽象方法
 * @Version: 1.0
 */



@EqualsAndHashCode(callSuper = true)
@Data
public abstract class ReActAgent extends BaseAgent{


    /**
     * 处理当前状态并决定下一步行动。简单的说就是思考要不要调用工具
     * @return 是否需要执行行动，true表示需要执行，false表示不需要执行
     */
    public abstract boolean think();


    /**
     * 执行决定的行动
     * @return 执行的结果
     */
    public abstract String act();


    /**
     * 执行单个步骤，思考和行动
     * @return 步骤执行结果
     */
    @Override
    public String step() {

        try {
            boolean shouldAct = think();
            if(!shouldAct){
                return "思考完成 - 无需行动";
            }
            return act();
        } catch (Exception e) {
            //记录一场日志
            return "步骤执行失败：" + e.getMessage();
        }


    }
}
